package middlewareWeb;

/**
 *Classe di supporto che implementa un oggetto che grazie alla libreria JDOM
 * esegue il parsing dei file xml di log e ne estrae le informazioni
 * @author myusy
 */

import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;

public class XMLReader 
{
    /**
     * Metodo che crea un file buffer xml che permetta di poter fare il parsing.
     * Al file di log viene aggiunta intestazione e una tag root
     * @param nome di cui creare la copia valida
     */
    public void creaSupporto(String s){
        BufferedReader b = null;
        PrintStream p;

        try {
            b = new BufferedReader(new FileReader("/home/myusy/NetBeansProjects/MiddleWareWebApp/"+s));
            p = new PrintStream("/home/myusy/NetBeansProjects/MiddleWareWebApp/Buffer/buffer_"+s);
            p.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?><logs>");
            for (;;) {
                String r = b.readLine(); // legge la prossima riga del file
                if (r == null) break; // esce dal ciclo se le righe sono finite
                p.println(r);
            }
            p.println("</logs>");

            // chiude il canale di input
            b.close();
            p.close();
        }
        catch(FileNotFoundException e) { // cattura errori prodotti da new FileReader(s)
            throw new RuntimeException("Errore: impossibile aprire il file " + s);
        }
        catch(IOException e) { // cattura errori prodotti da readLine()
            throw new RuntimeException("Errore di lettura del file " + s);
        }
    }



    /**
     * Metodo che esegue il controllo su un file Xml. Il metodo
     * trasforma il file xml in un oggetto di tipo document per poi eseguire il parsing
     * e poter accedere alle varie foglie del file xml tramite semplici metodi.
     * In particolare li metodo restituisce l'ultimo valore presente nel file relativamente
     * al determinato tag indicato
     * @param s nome del file da leggere
     * @param campo nome del tag di cui vogliamo leggere l'ultimo valore
     * @return il valore all'interno del tag indicato
     */
    public String controlloXML(String s,String campo) {
      String v=null;
      this.creaSupporto(s);
      try {
        //Creo un SAXBuilder e con esco costruisco un document
        SAXBuilder builder = new SAXBuilder();
        Document document = builder.build(new File("/home/myusy/NetBeansProjects/MiddleWareWebApp/Buffer/buffer_"+s));
     
        //Prendo la radice
        Element root = document.getRootElement();
        //Estraggo i figli dalla radice
        List children = root.getChildren();
        Iterator iterator = children.iterator();
        String valore=null;
        //Per ogni figlio
        while(iterator.hasNext()){
            Element item = (Element)iterator.next();
            Element message = item.getChild(campo);
            valore= message.getText();
        }
        return valore;
    }
    catch (Exception e) {
      System.err.println("Errore durante la lettura dal file");
      e.printStackTrace();
    }
        return v;
    }
   
}
